﻿using ZeroSum.IdGenerator.Configurations;
using ZeroSum.IdGenerator.Contract;

namespace ZeroSum.IdGenerator;

/// <summary>
///     这是一个调用的例子，默认情况下，单机集成者可以直接使用 Generate()。
/// </summary>
public class IDGenerator
{
    private static IIdGenerator? _idGenInstance;

    /// <summary>
    ///     设置参数，建议程序初始化时执行一次
    /// </summary>
    /// <param name="options"></param>
    public static void SetIdGenerator(IdGeneratorOptions options)
    {
        _idGenInstance = new DefaultIdGenerator(options);
    }

    /// <summary>
    ///     生成新的Id
    ///     调用本方法前，请确保调用了 SetIdGenerator 方法做初始化。
    ///     否则将会初始化一个WorkerId为1的对象。
    /// </summary>
    /// <returns></returns>
    public static long Generate()
    {
        if (_idGenInstance == null)
            _idGenInstance = new DefaultIdGenerator(new IdGeneratorOptions
            {
                WorkerId = 1
            });

        return _idGenInstance.NewLong();
    }
}